<?php
require_once 'lib/libs.php';
session_start ();

// //importante. completar los campos que faltan!!!!!!
$smarty = getSmarty ();

if(!isset($_SESSION['USR'])){
	//redirect
	header("Location: ".'/login.php');
}else{
	$usuario = $_SESSION['USR'];
	$smarty->assign('usuario',$usuario);
}

if (isset ( $_REQUEST ['operacion'] )) {
	$operacion = $_REQUEST ['operacion'];
			
	if ($operacion == 'getWeekUsr') {
	
		$days = DateUtils::getWeekNext7Days(0);
		$toWeekNext7 = DateUtils::getFromToWeekNext7(0);
		$from = $toWeekNext7[0];
		$to = $toWeekNext7[1];
		$horarios=DAOHorario:: getAllFullJoinedByUsr($from, $to, $usuario->getId());
		echo json_encode(array($days,$horarios));
		return;
	}
	if ($operacion == 'reservaTurno') {
		
		$idUsr = $_REQUEST ['idUsr'];
		$idHorario = $_REQUEST ['idHorario'];
		$idClase = $_REQUEST ['idClase'];
		
		$user = DAOUsuario::getById($idUsr);
		$errorMessage=null;
		if($user->creditos<1 && $user->libre!='S'){
			$errorMessage = "No posee creditos suficientes";
		}elseif(DateUtils::getNowMySqlDate()>$user->vencimientoCreditos){
			$errorMessage = "Sus creditos han expirado";
		}
		if($errorMessage!=null){
			echo json_encode(array('errorMsg' => $errorMessage));
			return;
		}
		
		$toWeekNext7 = DateUtils::getFromToWeekNext7(0);
		$from = $toWeekNext7[0];
		$to = $toWeekNext7[1];
		$clase=null;
		
		$idClase = DAOHorario::existeClaseInstanciada($from, $to, $idHorario);
		if($idClase == -1){
			$clase = new Clase();
			$clase->setHorario ( $idHorario );
			$clase->setVacantes (15);
			$clase->setFecha ( DateUtils::getDateInAWeekFromHorario($idHorario));
			$clase = DAOClase::add($clase);
			$idClase = $clase->id; 
		}else{
			$clase = DAOClase::getById($idClase);
		}

		if($clase->vacantes<1){
			$errorMessage = "No hay mas vacantes en la clase seleccionada";
		}
		if(DAOUsuarioClase::existeReserva($user->id,$clase->id)!=-1){
			$errorMessage = "Ya existe una reserva realizada para esa clase";
		}
		if($errorMessage!=null){
			echo json_encode(array('errorMsg' => $errorMessage));
			return;
		}
		if($clase->vacantes > 0 ){
			$clase->setVacantes($clase->vacantes -1);
		}
		DAOClase::update($clase);	
		
		if($user->libre=='N'){
			$user->setCreditos($user->creditos -1);
			$user = DAOUsuario::updateCreditos($user);
		}
		
		$usuarioClase = new UsuarioClase();
		$usuarioClase->setUsuario ($idUsr);
		$usuarioClase->setClase ($idClase);
		$usuarioClase->setFechaInscripcion(DateUtils::getNowMysqlDate());
		if($user->libre=='S'){
			$usuarioClase->setCreditosRestantes(-1);
		}else{
			$usuarioClase->setCreditosRestantes($user->creditos);
		}
		DAOUsuarioClase::add($usuarioClase);
		echo json_encode(array($clase,$user));
		return;
	}
	if ($operacion == 'cancelarTurno') {
	
		$idUsr = $_REQUEST ['idUsr'];
		$idClase = $_REQUEST ['idClase'];
	
		$errorMessage=null;
		if(DAOUsuarioClase::existeReserva($idUsr,$idClase)==-1){
			$errorMessage = "No existe una reserva realizada para esa clase";
		}
		$clase = DAOClase::getById($idClase);
		
		if(DateUtils::compareWithNow2($clase->fecha,-2)=="mayor"){
			$errorMessage = "El turno se puede cancelar hasta 2 horas antes del comienzo de la clase";
		}
		
		$user = DAOUsuario::getById($idUsr);
		if($errorMessage!=null){
			echo json_encode(array('errorMsg' => $errorMessage));
			return;
		}
	
		$toWeekNext7 = DateUtils::getFromToWeekNext7(0);
		$from = $toWeekNext7[0];
		$to = $toWeekNext7[1];
					
		$clase->setVacantes($clase->vacantes +1);
		DAOClase::update($clase);
	
		if($user->libre=='N'){
			$user->setCreditos($user->creditos +1);
		}
		$user = DAOUsuario::updateCreditos($user);
	
		DAOUsuarioClase::delete($idClase,$idUsr);
		
		echo json_encode(array($clase,$user));
		return;
	}	
	if ($operacion == 'getReservas') {
		$idUsr = $_REQUEST ['idUsr'];
		$reservas = DAOUsuarioClase::getByUsernameId($idUsr);
		echo json_encode($reservas);
		return;
	}	
}
$smarty->display ( 'turnosUsr.html' );

?>